home *** CD-ROM | disk | FTP | other *** search
- /*
- ** Start.c
- **
- ** The program entry point
- **
- ** Copyright © 1990-1996 by Olaf `Olsen' Barthel
- ** All Rights Reserved
- **
- ** :ts=4
- */
-
- #include <intuition/intuitionbase.h>
- #include <workbench/workbench.h>
- #include <exec/execbase.h>
- #include <dos/dosextens.h>
-
- #include <clib/intuition_protos.h>
- #include <clib/exec_protos.h>
- #include <clib/dos_protos.h>
-
- #include <pragmas/intuition_pragmas.h>
- #include <pragmas/exec_pragmas.h>
- #include <pragmas/dos_pragmas.h>
-
- #include <string.h>
-
- /* Standard topaz.font/8. */
-
- extern struct TextAttr DefaultFont;
-
- /* exec.library base pointer. */
-
- extern struct ExecBase *SysBase;
-
- /* The appropriate machine type check. */
-
- #if defined(CPU_ANY) || defined(CPU_any)
- #define MACHINE_OKAY (1)
- #endif
-
- #if defined(CPU_68020) || defined(CPU_68030)
- #define MACHINE_OKAY (SysBase->AttnFlags & AFF_68020)
- #endif
-
- #if defined(CPU_68040)
- #define MACHINE_OKAY (SysBase->AttnFlags & AFF_68040)
- #endif
-
- /* Start():
- *
- * Program entry point, checks for the right CPU type and
- * runs the main program if possible.
- */
-
- LONG __saveds __stdargs
- Start(VOID)
- {
- /* Get SysBase. */
-
- SysBase = *(struct ExecBase **)4;
-
- /* Is the minimum required processor type and Kickstart 2.04 (or higher)
- * available?
- */
-
- if(MACHINE_OKAY && (SysBase->LibNode.lib_Version > 37 || (SysBase->LibNode.lib_Version == 37 && SysBase->SoftVer >= 175)))
- {
- // Without the typedef the syntax would make you go nuts...
-
- typedef LONG (* SPINY)(VOID);
-
- extern SPINY SpinyNorman(VOID);
-
- return((*SpinyNorman())());
- }
- else
- {
- struct Process *ThisProcess = (struct Process *)FindTask(NULL);
-
- /* Is a Shell window available? */
-
- if(ThisProcess->pr_CLI)
- {
- struct DosLibrary *DOSBase;
-
- /* Show the message. */
-
- if(DOSBase = (struct DosLibrary *)OpenLibrary("dos.library",0))
- {
- STRPTR String;
-
- if(MACHINE_OKAY)
- String = "Kickstart 2.04 or higher required.\a\n";
- else
- String = "MC68020 or higher required.\a\n";
-
- Write(Output(),String,strlen(String));
-
- CloseLibrary(DOSBase);
- }
-
- return(RETURN_FAIL);
- }
- else
- {
- struct IntuitionBase *IntuitionBase;
- struct WBStartup *WBenchMsg;
-
- /* Wait for startup message. */
-
- WaitPort(&ThisProcess->pr_MsgPort);
-
- /* Get the message. */
-
- WBenchMsg = (struct WBStartup *)GetMsg(&ThisProcess->pr_MsgPort);
-
- /* Show the message. */
-
- if(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0))
- {
- STATIC struct IntuiText SorryText = {0,1,JAM1,6,3,&DefaultFont,(STRPTR)"Sorry",NULL};
-
- struct IntuiText *Body;
- LONG Width;
-
- if(MACHINE_OKAY)
- {
- STATIC struct IntuiText BodyText = {0,1,JAM1,5,3,&DefaultFont,(STRPTR)"Kickstart 2.04 or higher required.",NULL};
-
- Body = &BodyText;
- Width = 309;
- }
- else
- {
- STATIC struct IntuiText BodyText = {0,1,JAM1,5,3,&DefaultFont,(STRPTR)"MC68020 or higher required.",NULL};
-
- Body = &BodyText;
- Width = 253;
- }
-
- AutoRequest(NULL,Body,NULL,&SorryText,NULL,NULL,Width,46);
-
- CloseLibrary(IntuitionBase);
- }
-
- /* Return the startup message and exit. */
-
- Forbid();
-
- ReplyMsg((struct Message *)WBenchMsg);
- }
- }
- }
-